use strict

"use strict" - викликає суворий режим.

Синтаксис:

"use strict"; //або 'use strict';

Опис:

З виходом версії ECMAScript 5 (ES5) було добавлено ряд можливостей і правил що призвело до того що старі версії будуть виконуватися з помилками.

Щоб старий код у нових браузерах виконувався без помилок було вирішено що по замовчуванню буде підтримуватися старий код, а для того щоб включити підтримку нового коду тобто у новому режимі стандарту необхідно вручну включати цей режим за допомогою спеціальної директиви.

Зверніть увагу що різні браузери можуть підтримувати/не підтримувати певну заборону у суворому режимі. У версіях Internet Explorer до Internet Explorer 10 суворий режим не підтримується.

Директива виглядає як рядок "use strict"; або 'use strict'; і ставиться на початку скрипта або функції.

Якщо браузер не підтримує суворий режим то "use strict"; він проігнорує і помилки не виникне.

Суворий режим можна включити як для всього скрипту так і для лише окремої функції.

"use strict"; // Цей код буде працювати з сучасного стандарту ES5 у всьому скрипті function test(){ "use strict"; // Цей код буде працювати з сучасного стандарту ES5 лише у даній функції }

При включенні суворого режиму виключити його не можливо!

Слід пам'ятати що при включенні суворого режиму ви повині дотримуватися нового синтаксису інакше можуть виникнути помилки виконання.

var

Оголошення змінних без var призведе до помилки у суворому режимі:

mistypedVaraible =17; // оголошуємо змінну без var у звичайному режимі "use strict"; mistypedVaraible =17; // Кидає ReferenceError в суворому режимі

Дублювання елементів у об'єкту

У суворому режимі дублювання елементів заборонено, так як призведе до помилки:

var ob={x:1, y:45, x:1}; //x повторюється два рази у звичайному режимі 'use strict'; var ob={x:1, y:45, x:1}; //ReferenceError в суворому режимі

Дублювання параметрів функції

У суворому режимі дублювання параметрів у функції заборонено.

function a(a1,a1){return 1;}; 'use strict'; function a(a1,a1){return 1;}; //SyntaxError: duplicate formal argument a1

Заморожує arguments

Не можливо змінити значення які передаються у функцію в об'єкті arguments.

function a(x,y){ "use strict"; arguments[0]=12; alert(x); } function b(x,y){ arguments[0]=12; alert(x); } a(5); b(5);

Спроби видалити властивості яку заборонено видалити викликатимуть виключення

"use strict"; delete Object.prototype; // TypeError

Вісімковий синтаксис

Суворий режим забороняє синтаксис вісімкової системи числення. Вісімковий синтаксис не є частиною ECMAScript, але підтримується у всіх браузерах за допомогою дописування нуля попереду до числу: 0644 === 420 і "\ 045" === "%".

var sum = 015+15; 'use strict'; var sum = 015+15; //SyntaxError: Octal literals are not allowed in strict mode.

Зарезервовані нові слова ключові

У суворому режимі є зарезервовані ключові слова на майбутнє. Тобто називати змінні, властивості і функції не можна.